package main

import (
	"fmt"
	"sync/atomic"
)

var value int32

func main() {
	fmt.Println("======== old value ========")
	fmt.Println(value)
	fmt.Println(" ========== cas value =========")
	addValue(3)
	fmt.Println(value)
}

// 不断的尝试原子地更新value 的值， 知道操作成功为止
func addValue(delta int32) {
	for {
		v := value
		if atomic.CompareAndSwapInt32(&value, v, (v + delta)) {
			break
		}
	}
}
